package com.eric.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.eric.domain.po.Account;
import com.eric.domain.vo.AccountVO;
import com.eric.mapper.AccountMapper;
import com.eric.service.AccountService;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.relation.RelationManager;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service

public class AccountServiceImpl extends ServiceImpl<AccountMapper,Account> implements AccountService {

    @Override
    public List<AccountVO> getAllAccountList() {
        RelationManager.addQueryRelations("idCard","roles");
//        分页查询不用使用listAs
        List<Account> accountList = queryChain().withRelations().page(new Page<>(1, 10)).getRecords();
        return BeanUtil.copyToList(accountList, AccountVO.class);
    }

    @Override
    @Cacheable(key="#id")
    public Account getOneById(Integer id) {
        return getById(id);
    }

  /*  @Override
    public List<Account> getAllAccountByPage() {

//        在service下，直接调用queryChain()方法，withRelations是联合查询，分页查询
        Page<Account> page = queryChain().withRelations().page(new Page<Account>());
        System.out.println(page.getRecords());
//        在第20行中，调用了一次后，RelationManager.addQerryRelations会失效，要继续使用，需要重新定义
//        RelationManager.addQueryRelations("idCard","roles");
//
//        oneAs()方法，在搜索最后，可以转换层AccountVO类型数据，注意，如果AccountVO中没有Relation，就不会显示，哪怕定义了idCard对象，如果没有
//        @Relations注解，也会查询不出来
//        AccountVO one = queryChain().where(ACCOUNT.ID.eq(6)).withRelations().oneAs(AccountVO.class);
//        System.out.println(one);

        String sql="select * from tb_account";
        List<Row> rows = Db.selectListBySql(sql);
        for (Row row : rows) {
            Account entity = row.toEntity(Account.class);
            System.out.println(entity);
        }

return null;
//        return page.getRecords();
    }*/
}
